/**
 * 2010(c) Copyright Oceansoft Information System Co.,LTD. All rights reserved.
 * <p>
 * Compile: JDK 1.6+
 * <p>
 * 版权所有(C)：江苏欧索软件有限公司
 * <p>
 * 公司名称：江苏欧索软件有限公司
 * <p>
 * 公司地址：中国苏州科技城青山路1号
 * <p>
 * 网址: http://www.oceansoft.com.cn
 * <p>
 * 版本: 苏州公安统一用户管理平台1.0
 * <p>
 * 作者: 090922(陈伟)
 * <p>
 * 文件名:ISysUserDao.java
 * <p>
 * 类产生时间: 2012-5-23 下午5:11:39
 * <p>
 * 负责人: 090922(陈伟)
 * <p>
 * Email:javacspring@gmail.com
 * <p>
 * 所在组 : 苏州公安统一用户管理平台
 * <p>
 * 所在部门: 电信/国土——技术二部
 * <p>
 * <p>
 */
package com.oceansoft.core.dao;

import java.util.List;
import java.util.Map;

import com.hui.platform.system.exception.HuiException;
import com.oceansoft.core.common.util.Pagination;
import com.oceansoft.core.domain.SysDutyDict;
import com.oceansoft.core.domain.SysPartTime;
import com.oceansoft.core.domain.SysUser;

/**
 * 系统用户操作表
 * 
 * @author chenw
 * 
 */
public interface ISysUserDao {

	/**
	 * 分页查询
	 * 
	 * @param deptId
	 * @param pageIndex
	 * @param user
	 * @return
	 */
	Pagination<SysUser> findByPage(String deptId, int pageIndex, SysUser user);

	/**
	 * 新增用户
	 * 
	 * @param user
	 * @return
	 */
	int saveAddUser(SysUser user);

	boolean create(SysUser user) throws HuiException;
	
	boolean update(SysUser user) throws HuiException;
	/**
	 * 按照警号查询
	 * 
	 * @param policeNum
	 * @return
	 */
	List<SysUser> findByPoliceNum(String policeNum);

	/**
	 * 保存编辑
	 * 
	 * @param user
	 * @return
	 */
	int editUser(SysUser user);

	/**
	 * 根据部门编号查询该部门下所有人员列表信息
	 * 
	 * @param deptId
	 *            部门编号
	 * @return list
	 */
	List<SysUser> findUserByDept(String deptId);

	/**
	 * 根据人员编号获取人员信息
	 * 
	 * @param dbId
	 *            人员编号
	 * @return list
	 */
	SysUser findUserByDbId(Long dbId);

	/**
	 * 通过编号，名称，部门编号查询所有人员列表
	 * 
	 * @param dbId
	 *            编号
	 * @param name
	 *            名称
	 * @param deptId
	 *            部门编号
	 * @return list
	 */
	List<SysUser> findUserByDbIdAndName(Long dbId, String name, String deptId);

	/**
	 * 通过部门编号，分页查询所有人员信息
	 * 
	 * @param deptId
	 *            部门编号
	 * @param pageIndex
	 *            分页索引
	 * @return pagination
	 */
	Pagination<SysUser> findUserByPagination(String deptId, int pageIndex);

	/**
	 * 查询部门人员通讯录
	 * 
	 * @param deptId
	 * @param pageIndex
	 * @return
	 */
	Pagination<SysUser> findUserContact(String deptId, int pageIndex);

	/**
	 * 查询部门人员----工作委托
	 * 
	 * @param deptId
	 * @param pageIndex
	 * @return
	 */
	Pagination<SysUser> findUserDelegate(String deptId, int pageIndex, String name, String manageDept);

	/**
	 * 查询部门下人数
	 * 
	 * @param deptId
	 * @return
	 */
	int findCountByDept(String deptId);

	/**
	 * 根据 编号，姓名，部门编号 进行分页 模糊查询
	 * 
	 * @param dbId
	 *            编号
	 * @param name
	 *            姓名
	 * @param deptId
	 *            部门编号
	 * @param pageIndex
	 *            分页索引
	 * @return pagination
	 */
	public Pagination<SysUser> findUserByCritirialPagination(Map<String, String> params, int pageIndex);

	/**
	 * 根据编号删除 用户信息
	 * 
	 * @param policenum
	 *            编号
	 */
	int deleteUserByDbId(String policenum);

	/**
	 * 根据警号查询用户信息
	 * 
	 * @param policeNum
	 * @return
	 */
	SysUser findUserByPoliceNum(String policeNum);

	/**
	 * 更新部门
	 * 
	 * @param dbId
	 * @param deptId
	 */
	void updateDept(String dbId, String deptId);

	/**
	 * 更新人员信息
	 * 
	 * @param sysUser
	 *            人员对象
	 */
	int updateUserInfo(SysUser sysUser);

	/**
	 * 更新用户个人联系方式信息
	 * 
	 * @param sysUser
	 * @return
	 */
	int updateUserTelInfo(SysUser sysUser);

	/**
	 * 根据警号查询用户信息
	 * 
	 * @param policeNum
	 * @return
	 */
	List<SysUser> findUserInfoByPoliceNum(String policeNum);

	/**
	 * 获取所有职务信息
	 * 
	 * @return list
	 */
	List<SysDutyDict> findAllDutyInfo();

	/**
	 * 人员调动
	 * 
	 * @param dutyName
	 *            职务名称
	 * @param deptId
	 *            部门编号
	 * @param dutyId
	 *            职务代号
	 * @param policeNum
	 *            警号
	 */
	void transferUser(String dutyName, String deptId, String dutyId, String policeNum);

	/**
	 * 人员兼职
	 * 
	 * @param deptId
	 *            主部门编号
	 * @param policeNum
	 *            警号
	 * @param partTimeDeptId
	 *            兼职部门编号
	 * @param partTimeDeptName
	 *            兼职部门名称
	 * @param dutyId
	 *            职务编号
	 * @param dutyName
	 *            职务名称
	 */
	void updatePartTime(String deptId, String policeNum, String partTimeDeptId, String partTimeDeptName, String dutyId,
			String dutyName);

	/**
	 * 根据警号获取兼职信息
	 * 
	 * @param policeNum
	 *            警号
	 * @return
	 */
	List<SysPartTime> queryPartTimeInfoByPoliceNum(String policeNum);

	/**
	 * 插入人员信息
	 * 
	 * @param deptId
	 *            部门编号
	 * @param policeNum
	 *            警号
	 * @param name
	 *            姓名
	 * @param dutyId
	 *            职务编号
	 * @param dutyName
	 *            职务名称
	 * @param idCard
	 *            身份证
	 * @param tel_office
	 *            办公电话
	 * @param tel_home
	 *            住宅电话
	 * @param tel_mobile
	 *            移动电话
	 * @param tel_short
	 *            短号
	 * @param tel_inter
	 *            内线
	 * @param tel_outSide
	 *            外线
	 * @param orderNum
	 *            排序序号
	 */
	int addUser(String deptId, String policeNum, String name, String dutyId, String dutyName, String idCard,
			String tel_office, String tel_home, String tel_mobile, String tel_short, String tel_inter,
			String tel_outSide, int orderNum);

	/**
	 * 根据警号和密码判断登录是否成功
	 * 
	 * @param policenum
	 *            警号
	 * @param password
	 *            密码
	 * @return
	 */
	int checkUserLogin(String policenum, String password);

	/**
	 * 查询应用系统所有人员信息
	 * 
	 * @param appId
	 * @return
	 */
	List<SysUser> findUsersByAppId(String appId);

	/**
	 * 查询指定ID用户信息
	 * 
	 * @param ids
	 * @return
	 */
	List<SysUser> findUserByIds(String[] ids);

	/**
	 * 查询指定DBID用户信息
	 * 
	 * @param ids
	 * @return
	 */
	List<SysUser> findUserByIds(String ids);

	/**
	 * 查询部门编号所对应的所有警号
	 * 
	 * @param ids
	 * @return
	 */
	List<String> findUserByDeptIds(String ids);

	/**
	 * 更新用户密码
	 * 
	 * @author chenw
	 * @param user
	 * @return
	 */
	int updatePassword(SysUser user);

	/**
	 * 删除用户兼职信息
	 * 
	 * @param policenum
	 *            警号
	 * @param dutyid
	 *            部门编号
	 * @return
	 */
	int deletePartTimeInfo(String policenum, String dutyid);

	/**
	 * 通过警号只查询用户信息
	 * 
	 * @param policenum
	 * @return
	 */
	List<SysUser> findOnleUserInfoByPoliceNum(String policenum);

	/**
	 * 根据条件查询人员信息
	 * 
	 * @param policenum
	 *            警号
	 * @param name
	 *            姓名
	 * @param deptid
	 *            部门编号
	 * @param checkResult
	 *            是否在当前部门中
	 * @param pageIndex
	 * @return
	 */
	Pagination<SysUser> queryUserByPagination(String policenum, String name, String deptid, String checkResult,
			int pageIndex, String manageDept);

	/**
	 * 
	 * @return
	 */
	List<SysUser> findAllSyncUser();

	/**
	 * 根据 姓名 部门名称 手机号码 查询接受短信人信息
	 * 
	 * @param name
	 *            接受短信人姓名
	 * @param deptname
	 *            部门名称
	 * @param tel_mobile
	 *            手机号
	 * @return
	 */
	Pagination<SysUser> queryUserInfoByPagination(String name, String deptname, String tel_mobile, int pageIndex);

	/**
	 * 查询警号，应用编号所对应的角色编号和名称
	 * 
	 * @param policeNum
	 * @param appId
	 * @return
	 */
	List<String[]> findRnameIdByUserApp(String policeNum, String appId);

	/**
	 * 根据部门编号查询部门人员的姓名，警号列表
	 * 
	 * @param deptId
	 * @return
	 */
	List<SysUser> findNameIdByDept(String deptId);

	/**
	 * 查找用户的个人电话
	 * 
	 * @param deptId
	 *            部门
	 * @param pageIndex
	 *            页数
	 * @param user
	 *            查询条件
	 * @param inDept
	 *            是否部门内 查询条件
	 * @return
	 */
	Pagination<SysUser> findUserContact(String deptId, int pageIndex, SysUser user, String inDept);

	/**
	 * 按部门查找
	 * 
	 * @param deptId
	 * @param pageIndex
	 * @return
	 */
	Pagination<SysUser> findUserByDept(String deptId, int pageIndex);

	/**
	 * 查询用户
	 * 
	 * @param params
	 * @param pageIndex
	 * @return
	 */
	Pagination<SysUser> findUserByCondition(Map<String, String> params, int pageIndex);

	/**
	 * 查询所有人员
	 * 
	 * @return
	 */
	List<SysUser> findAllUser();

	/**
	 * 查询所有人员
	 * 
	 * @return
	 */
	List<SysUser> findAllUserDetails();

	/**
	 * 用户登录验证
	 * 
	 * @param loginId
	 * @param password
	 * @param idType
	 * @return
	 */
	SysUser findUserByPwdName(String loginId, String password, int idType);

	/**
	 * 新增或编辑是看身份证号码不能重复
	 * 
	 * @param idCard
	 * @param dbId
	 * @return
	 */
	int findCountByIDCard(String idCard, String policdNum);

	int findCountByIDCard(String idCard);

	/**
	 * 查询这个部门下的最大排序序号
	 * 
	 * @param deptId
	 * @return
	 */
	int findMaxOrderNum(String deptId);

	/**
	 * 查询这个部门下的最大排序序号
	 * 
	 * @param deptId
	 * @return
	 */
	int findMinOrderNum(String deptId);

	/**
	 * 人员排序移动到最顶端
	 * 
	 * @param policeNum
	 *            移动的警号
	 * @param deptId
	 *            所在部门
	 * @param minOrderNum
	 *            所在部门在最小排序序号
	 * @param orderNum
	 *            本身排序序号
	 */
	void updateOrderToTop(String policeNum, String deptId, int minOrderNum, int orderNum);

	/**
	 * 排序的时候上移
	 * 
	 * @param dbId
	 *            当前记录dbId
	 * @param owner
	 *            所属人
	 * @param upOrder
	 *            上一条排序序号
	 * @param order
	 *            当前记录排序序号
	 * @param hasUp
	 *            是否存在上一条
	 */
	void updateOrderUp(String policeNum, String deptId, int upOrder, int order, boolean hasUp);

	/**
	 * 排序的时候下移
	 * 
	 * @param dbId
	 *            当前记录dbId
	 * @param owner
	 *            所属人
	 * @param downOrder
	 *            下一条排序序号
	 * @param order
	 *            当前记录排序序号
	 * @param hasDown
	 *            是否存在下一条
	 */
	void updateOrdeDown(String policeNum, String deptId, int downOrder, int order, boolean hasDown);

	/**
	 * 查询人上一条下一条排序序号
	 * 
	 * @param orderNum
	 * @param deptId
	 * @return
	 */
	List<Integer> findUpDownOrder(int orderNum, String deptId);

	/**
	 * 根据应用、角色查询人的信息
	 * 
	 * @param appId
	 * @param roleId
	 * @return
	 */
	List<SysUser> findUsersByAppRole(String appId, String roleId);

	/**
	 * 查找兼职信息，并以人员列表的形式展现
	 * 
	 * @param userId
	 * @return
	 */
	List<SysUser> findPartTimes(String userId);

	/**
	 * 管理员新增查询人员
	 * 
	 * @param deptId
	 *            查询的范围
	 * @param pageIndex
	 * @param user
	 *            查询条件
	 * @param manageDept
	 *            自身管理范围
	 * @return
	 */
	Pagination<SysUser> findManagerUsers(String deptId, int pageIndex, SysUser user, String manageDept);

	/**
	 * 个人通讯录查询
	 * 
	 * @param deptId
	 * @param manageDept
	 *            管理员管辖范围
	 * @param pageIndex
	 * @return
	 */
	Pagination<SysUser> findUserContacts(String deptId, String manageDept, int pageIndex, SysUser user);

	/**
	 * 通讯录管理员编辑个人电话
	 * 
	 * @param user
	 */
	void editPhone(SysUser user);

	/**
	 * 找出某个部门及其所有子部门的人的警号
	 * 
	 * @param deptId
	 * @return
	 */
	List<String> findByParentId(String deptId);

	SysUser findUserByIdCard(String loginId);

	/**
	 * 密码重置
	 * 
	 * @param dbId
	 * @param password
	 */
	void resetPwd(String policeNum, String password);

	/**
	 * 根据姓名模糊匹配用户信息
	 * 
	 * @param userName
	 * @return
	 */
	List<SysUser> findUserByFuzzyName(String userName, int maxRow);
    /**
     * 根据身份证查找用户
     * @param idCard
     * @return
     */
	SysUser _findUserByIdCard(String idCard);
	
	/**
	 * 根据姓名，部门模糊匹配用户信息
	 * 
	 * @param userName
	 * @return
	 */
	List<SysUser> findUserInfoByXm(String xm,String deptId);
	
	/**
	 * 根据姓名模糊匹配用户信息
	 * 
	 * @param userName
	 * @return
	 */
	List<SysUser> findAllUserInfoByXm(String xm);
}
